package ca.etsmtl.log120.tp3.rangs;

import ca.etsmtl.log120.tp3.cartes.Denomination;
import ca.etsmtl.log120.tp3.mains.Main;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #3
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : ListeAnalyseurs.java
Date cree : 2011-07-06
Date dern. modif. 2011-07-06
*************************************************** ****
Historique des modifications
*************************************************** ****

***************************************************/

public class Couleur extends AbstractRangAnalysable{

	private static final int NOMBRE_CARTES_MEME_COULEUR = 5;
	
	protected Denomination denom;
	protected Denomination[] resteMain = new Denomination[UtilMain.NOMBRE_CARTES_DANS_MAIN*2]; //Un tableau toujours plus grand qu'il faut (securitaire);
	
	/**
	 * Constructeur par defaut
	 */
	public Couleur(){}
	
	/**
	 * constructeur par copie d'objet
	 * @param couleur L'objet Couleur pour lequel on veut une copie
	 */
	public Couleur(Couleur couleur) {
		this.denom = couleur.denom;
		this.resteMain = couleur.resteMain.clone();
	}

	@Override
	public boolean reconnaitreMain(Main main) {
		
		denom = UtilMain.isCouleursPareilles(main, NOMBRE_CARTES_MEME_COULEUR);
		
		if(denom != null)
			return true;
		else
			return false;
	}

	@Override
	public Denomination getTopDenomination() {
		return denom;
	}
	
	@Override
	protected int comparerRangsIdentiques(AbstractRangAnalysable rang1, AbstractRangAnalysable rang2){
		
		if(rang1.getTopDenomination().compareTo(rang2.getTopDenomination()) > 0)
			return -1;
		else if(rang1.getTopDenomination().compareTo(rang2.getTopDenomination()) < 0)
			return 1;

		return UtilMain.compareKickers(rang1, rang2, NOMBRE_CARTES_MEME_COULEUR - 1);
	}

	/**
	 * Retourne un clone de l'objet Couleur qui appel
	 */
	@Override
	public AbstractRangAnalysable clone() {
		
		return new Couleur(this);
	}

	/**
	 * Methode qui determine le reste de la main Couleur pour la comparaison
	 * donc determine les 4 plus haute cartes apres la plus haute qui est denom
	 */
	@Override
	public void determineResteMain(Main main) {
		
		Main mainMod = UtilMain.removeDenom(main, denom);
		
		for(int i = 0; i < UtilMain.NOMBRE_CARTES_DANS_MAIN - 1; i++){
			
			resteMain[i] = UtilMain.getHighestCard(mainMod);
			mainMod = UtilMain.removeDenom(mainMod, resteMain[i]);
		}
	}

	
	@Override
	public Denomination[] getResteMain() {
		
		return resteMain;
	}
	
	public String toString(){
		
		String string = "Couleur: " + denom.toString() + " Reste main: ";
		
		for(Denomination denom: resteMain){
			
			if(denom != null)
				string = string + " " + denom;
		}
		
		return string;
	}

}
